using UnityEngine;

namespace UbiArt.ITF {
	[Games(GameFlags.RLVersion | GameFlags.VH | GameFlags.RA)]
	public partial class FluidConfig : CSerializable {
		public float Elasticity;
		public float Velocity;
		public float Viscosity;
		public float TargetHeight;
		public float Amplification;
		public float TargetMaxHeight;
		public float TargetMinHeight;
		public float TargetAddHeight;
		public float UnityWidth;
		public uint PolylineUnityMult;
		public bool PolylineReaction;
		public float EnterMult;
		public float LeaveMult;
		public float MaxDstInfluence;
		public uint LevelsFront;
		public uint LevelsBack;
		public Vec3d LevelDelta;
		public Vec2d UVDelta;
		public uint PerpendicularBack;
		public float PerpendicularBackZ;
		public float PerpendicularBackScale;
		public float PerpendicularBackPos;
		public float PerpendicularBackPosZ;
		public uint PerpendicularFront;
		public float PerpendicularFrontZ;
		public float PerpendicularFrontScale;
		public float PerpendicularFrontPos;
		public float PerpendicularFrontPosZ;
		public float WeightMultiplier;
		public float dstInfluenceMultiplier;
		public float AbsorptionAtEdgeStart;
		public float AbsorptionAtEdgeEnd;
		public float AbsorptionAtEdge_Length;
		public float InfluenceLimit;
		public uint SideCount;
		public uint LayerCount;
		public float BlendFactor;
		public Path FxActor;
		public CListO<FluidFriseLayer> Layers;
		protected override void SerializeImpl(CSerializerObject s) {
			base.SerializeImpl(s);
			if (Settings.s.game == Settings.Game.RL || Settings.s.game == Settings.Game.COL) {
				Elasticity = s.Serialize<float>(Elasticity, name: "Elasticity");
				Velocity = s.Serialize<float>(Velocity, name: "Velocity");
				Viscosity = s.Serialize<float>(Viscosity, name: "Viscosity");
				TargetHeight = s.Serialize<float>(TargetHeight, name: "TargetHeight");
				Amplification = s.Serialize<float>(Amplification, name: "Amplification");
				TargetMaxHeight = s.Serialize<float>(TargetMaxHeight, name: "TargetMaxHeight");
				TargetMinHeight = s.Serialize<float>(TargetMinHeight, name: "TargetMinHeight");
				TargetAddHeight = s.Serialize<float>(TargetAddHeight, name: "TargetAddHeight");
				UnityWidth = s.Serialize<float>(UnityWidth, name: "UnityWidth");
				PolylineUnityMult = s.Serialize<uint>(PolylineUnityMult, name: "PolylineUnityMult");
				EnterMult = s.Serialize<float>(EnterMult, name: "EnterMult");
				LeaveMult = s.Serialize<float>(LeaveMult, name: "LeaveMult");
				MaxDstInfluence = s.Serialize<float>(MaxDstInfluence, name: "MaxDstInfluence");
				LevelsFront = s.Serialize<uint>(LevelsFront, name: "LevelsFront");
				LevelsBack = s.Serialize<uint>(LevelsBack, name: "LevelsBack");
				LevelDelta = s.SerializeObject<Vec3d>(LevelDelta, name: "LevelDelta");
				UVDelta = s.SerializeObject<Vec2d>(UVDelta, name: "UVDelta");
				PerpendicularBack = s.Serialize<uint>(PerpendicularBack, name: "PerpendicularBack");
				PerpendicularBackZ = s.Serialize<float>(PerpendicularBackZ, name: "PerpendicularBackZ");
				PerpendicularBackScale = s.Serialize<float>(PerpendicularBackScale, name: "PerpendicularBackScale");
				PerpendicularBackPos = s.Serialize<float>(PerpendicularBackPos, name: "PerpendicularBackPos");
				PerpendicularBackPosZ = s.Serialize<float>(PerpendicularBackPosZ, name: "PerpendicularBackPosZ");
				PerpendicularFront = s.Serialize<uint>(PerpendicularFront, name: "PerpendicularFront");
				PerpendicularFrontZ = s.Serialize<float>(PerpendicularFrontZ, name: "PerpendicularFrontZ");
				PerpendicularFrontScale = s.Serialize<float>(PerpendicularFrontScale, name: "PerpendicularFrontScale");
				PerpendicularFrontPos = s.Serialize<float>(PerpendicularFrontPos, name: "PerpendicularFrontPos");
				PerpendicularFrontPosZ = s.Serialize<float>(PerpendicularFrontPosZ, name: "PerpendicularFrontPosZ");
				WeightMultiplier = s.Serialize<float>(WeightMultiplier, name: "WeightMultiplier");
				dstInfluenceMultiplier = s.Serialize<float>(dstInfluenceMultiplier, name: "dstInfluenceMultiplier");
				AbsorptionAtEdgeStart = s.Serialize<float>(AbsorptionAtEdgeStart, name: "AbsorptionAtEdgeStart");
				AbsorptionAtEdgeEnd = s.Serialize<float>(AbsorptionAtEdgeEnd, name: "AbsorptionAtEdgeEnd");
				AbsorptionAtEdge_Length = s.Serialize<float>(AbsorptionAtEdge_Length, name: "AbsorptionAtEdge_Length");
				InfluenceLimit = s.Serialize<float>(InfluenceLimit, name: "InfluenceLimit");
				SideCount = s.Serialize<uint>(SideCount, name: "SideCount");
				LayerCount = s.Serialize<uint>(LayerCount, name: "LayerCount");
				BlendFactor = s.Serialize<float>(BlendFactor, name: "BlendFactor");
				FxActor = s.SerializeObject<Path>(FxActor, name: "FxActor");
				Layers = s.SerializeObject<CListO<FluidFriseLayer>>(Layers, name: "Layers");
			} else {
				Elasticity = s.Serialize<float>(Elasticity, name: "Elasticity");
				Velocity = s.Serialize<float>(Velocity, name: "Velocity");
				Viscosity = s.Serialize<float>(Viscosity, name: "Viscosity");
				TargetHeight = s.Serialize<float>(TargetHeight, name: "TargetHeight");
				Amplification = s.Serialize<float>(Amplification, name: "Amplification");
				TargetMaxHeight = s.Serialize<float>(TargetMaxHeight, name: "TargetMaxHeight");
				TargetMinHeight = s.Serialize<float>(TargetMinHeight, name: "TargetMinHeight");
				TargetAddHeight = s.Serialize<float>(TargetAddHeight, name: "TargetAddHeight");
				UnityWidth = s.Serialize<float>(UnityWidth, name: "UnityWidth");
				PolylineUnityMult = s.Serialize<uint>(PolylineUnityMult, name: "PolylineUnityMult");
				PolylineReaction = s.Serialize<bool>(PolylineReaction, name: "PolylineReaction");
				EnterMult = s.Serialize<float>(EnterMult, name: "EnterMult");
				LeaveMult = s.Serialize<float>(LeaveMult, name: "LeaveMult");
				MaxDstInfluence = s.Serialize<float>(MaxDstInfluence, name: "MaxDstInfluence");
				LevelsFront = s.Serialize<uint>(LevelsFront, name: "LevelsFront");
				LevelsBack = s.Serialize<uint>(LevelsBack, name: "LevelsBack");
				LevelDelta = s.SerializeObject<Vec3d>(LevelDelta, name: "LevelDelta");
				UVDelta = s.SerializeObject<Vec2d>(UVDelta, name: "UVDelta");
				PerpendicularBack = s.Serialize<uint>(PerpendicularBack, name: "PerpendicularBack");
				PerpendicularBackZ = s.Serialize<float>(PerpendicularBackZ, name: "PerpendicularBackZ");
				PerpendicularBackScale = s.Serialize<float>(PerpendicularBackScale, name: "PerpendicularBackScale");
				PerpendicularBackPos = s.Serialize<float>(PerpendicularBackPos, name: "PerpendicularBackPos");
				PerpendicularBackPosZ = s.Serialize<float>(PerpendicularBackPosZ, name: "PerpendicularBackPosZ");
				PerpendicularFront = s.Serialize<uint>(PerpendicularFront, name: "PerpendicularFront");
				PerpendicularFrontZ = s.Serialize<float>(PerpendicularFrontZ, name: "PerpendicularFrontZ");
				PerpendicularFrontScale = s.Serialize<float>(PerpendicularFrontScale, name: "PerpendicularFrontScale");
				PerpendicularFrontPos = s.Serialize<float>(PerpendicularFrontPos, name: "PerpendicularFrontPos");
				PerpendicularFrontPosZ = s.Serialize<float>(PerpendicularFrontPosZ, name: "PerpendicularFrontPosZ");
				WeightMultiplier = s.Serialize<float>(WeightMultiplier, name: "WeightMultiplier");
				dstInfluenceMultiplier = s.Serialize<float>(dstInfluenceMultiplier, name: "dstInfluenceMultiplier");
				AbsorptionAtEdgeStart = s.Serialize<float>(AbsorptionAtEdgeStart, name: "AbsorptionAtEdgeStart");
				AbsorptionAtEdgeEnd = s.Serialize<float>(AbsorptionAtEdgeEnd, name: "AbsorptionAtEdgeEnd");
				AbsorptionAtEdge_Length = s.Serialize<float>(AbsorptionAtEdge_Length, name: "AbsorptionAtEdge_Length");
				InfluenceLimit = s.Serialize<float>(InfluenceLimit, name: "InfluenceLimit");
				SideCount = s.Serialize<uint>(SideCount, name: "SideCount");
				LayerCount = s.Serialize<uint>(LayerCount, name: "LayerCount");
				BlendFactor = s.Serialize<float>(BlendFactor, name: "BlendFactor");
				FxActor = s.SerializeObject<Path>(FxActor, name: "FxActor");
				Layers = s.SerializeObject<CListO<FluidFriseLayer>>(Layers, name: "Layers");
			}
		}
	}
}

